# obj.__dict__ 对象的属性字典
# obj.__class__对象所属的类
# class.__bases__类的父类元组
# class.base__类的父类
# class.__mro__类的层次结构
# class._subclasses__() 类的子类列表
class A:
    pass


class B:
    pass


class C(A, B):
    def __init__(self, name, age):
        self.name = name
        self.age = age


if __name__ == '__main__':
    # 创建类的对象
    a = A()
    b = B()
    # 创建c类的对象
    c = C('小马', 23)
    print(f'对象a的属性字典：{a.__dict__}')
    print(f'对象b的属性字典：{b.__dict__}')
    print(f'对象c的属性字典：{c.__dict__}')

    print(f'对象a所属的类：{a.__class__}')
    print(f'对象b所属的类：{b.__class__}')
    print(f'对象c所属的类：{c.__class__}')

    print(f'A类的父类元组：{A.__bases__}')
    print(f'B类的父类元组：{B.__bases__}')
    print(f'C类的父类元组：{C.__bases__}')

    print(f'A类的父类：{A.__base__}')
    print(f'B类的父类：{B.__base__}')
    # A 类 ， 如果继承了多个类，结果只显示第一个父类
    print(f'C类的父类：{C.__base__}')

    print(f'A类的层次结构{A.__mro__}')
    print(f'B类的层次结构{B.__mro__}')
    # C 类继承了A类、B类，间接继承了object类
    print(f'C类的层次结构{C.__mro__}')

    # 用于获取类的子类列表
    # A 的子类是 C
    print(f'A类的子类列表：{A.__subclasses__()}')
    # B 的子类是 C
    print(f'B类的子类列表：{B.__subclasses__()}')
    print(f'C类的子类列表：{C.__subclasses__()}')
